]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspacesView: Add Home and End keys for workspace navigation
authorkyte <kyteinsky@gmail.com>
Mon, 21 Feb 2022 14:36:50 +0000 (20:06 +0530)
committerkyte <kyteinsky@gmail.com>
Mon, 21 Feb 2022 14:36:50 +0000 (20:06 +0530)
This commit adds support for Home and End keys to move
to the first and last workspace respectively.
Previously only Page_Up and Page_Down were recognized
to move one workspace at a time in overview mode.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2201>

js/ui/workspacesView.js

index 0acc3e56202ef669d53df6afe178603e81b8859e..f13252827148b6c50ab3b59ecfc227551515b515 100644 (file)
@@ -1158,31 +1158,46 @@ class WorkspacesDisplay extends St.Widget {
         const vertical = workspaceManager.layout_rows === -1;
         const rtl = this.get_text_direction() === Clutter.TextDirection.RTL;
 
-        let dir;
+        let which;
         switch (event.get_key_symbol()) {
         case Clutter.KEY_Page_Up:
             if (vertical)
-                dir = Meta.MotionDirection.UP;
+                which = Meta.MotionDirection.UP;
             else if (rtl)
-                dir = Meta.MotionDirection.RIGHT;
+                which = Meta.MotionDirection.RIGHT;
             else
-                dir = Meta.MotionDirection.LEFT;
+                which = Meta.MotionDirection.LEFT;
             break;
         case Clutter.KEY_Page_Down:
             if (vertical)
-                dir = Meta.MotionDirection.DOWN;
+                which = Meta.MotionDirection.DOWN;
             else if (rtl)
-                dir = Meta.MotionDirection.LEFT;
+                which = Meta.MotionDirection.LEFT;
             else
-                dir = Meta.MotionDirection.RIGHT;
+                which = Meta.MotionDirection.RIGHT;
+            break;
+        case Clutter.KEY_Home:
+            which = 0;
+            break;
+        case Clutter.KEY_End:
+            which = workspaceManager.n_workspaces - 1;
             break;
         default:
             return Clutter.EVENT_PROPAGATE;
         }
 
-        const ws = workspaceManager.get_active_workspace().get_neighbor(dir);
+        let ws;
+        if (which < 0)
+            // Negative workspace numbers are directions
+            // with respect to the current workspace
+            ws = workspaceManager.get_active_workspace().get_neighbor(which);
+        else
+            // Otherwise it is a workspace index
+            ws = workspaceManager.get_workspace_by_index(which);
+
         if (ws)
             Main.wm.actionMoveWorkspace(ws);
+
         return Clutter.EVENT_STOP;
     }